{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 10. Approximate Inference"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.animation as animation\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "%matplotlib inline\n",
    "\n",
    "from prml.rv import VariationalGaussianMixture\n",
    "from prml.preprocess import PolynomialFeature\n",
    "from prml.linear import (\n",
    "    VariationalLinearRegression,\n",
    "    VariationalLogisticRegression\n",
    ")\n",
    "\n",
    "np.random.seed(1234)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 10.2 Illustration: Variational Mixture of Gaussians"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "x1 = np.random.normal(size=(100, 2))\n",
    "x1 += np.array([-5, -5])\n",
    "x2 = np.random.normal(size=(100, 2))\n",
    "x2 += np.array([5, -5])\n",
    "x3 = np.random.normal(size=(100, 2))\n",
    "x3 += np.array([0, 5])\n",
    "x_train = np.vstack((x1, x2, x3))\n",
    "\n",
    "x0, x1 = np.meshgrid(np.linspace(-10, 10, 100), np.linspace(-10, 10, 100))\n",
    "x = np.array([x0, x1]).reshape(2, -1).T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "vgmm = VariationalGaussianMixture(n_components=6)\n",
    "vgmm.fit(x_train)\n",
    "\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=vgmm.classify(x_train))\n",
    "plt.contour(x0, x1, vgmm.pdf(x).reshape(100, 100))\n",
    "plt.xlim(-10, 10, 100)\n",
    "plt.ylim(-10, 10, 100)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"432\" height=\"288\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAA48W1kYXQAAAKtBgX//6ncRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTUyIHIyODU0IGU5YTU5MDMgLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE3IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NiBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49NSBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNo\n",
       "PTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFw\n",
       "bWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAHHVliIQA\n",
       "E//+97GPgU3IAA2XOop6H+EVsfSQUXqx2aBk6gAAAwAAiYGOFk1v/CH1/gAT8NL6b4COhp23maaj\n",
       "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\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<matplotlib.animation.ArtistAnimation at 0x7f184c219e10>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vgmm = VariationalGaussianMixture(n_components=6)\n",
    "vgmm._init_params(x_train)\n",
    "params = np.hstack([param.flatten() for param in vgmm.get_params()])\n",
    "fig = plt.figure()\n",
    "colors = np.array([\"r\", \"orange\", \"y\", \"g\", \"b\", \"purple\"])\n",
    "frames = []\n",
    "for _ in range(100):\n",
    "    plt.xlim(-10, 10)\n",
    "    plt.ylim(-10, 10)\n",
    "    plt.gca().set_aspect('equal', adjustable='box')\n",
    "    r = vgmm._variational_expectation(x_train)\n",
    "    imgs = [plt.scatter(x_train[:, 0], x_train[:, 1], c=colors[np.argmax(r, -1)])]\n",
    "    for i in range(vgmm.n_components):\n",
    "        if vgmm.component_size[i] > 1:\n",
    "            imgs.append(plt.scatter(vgmm.mu[i, 0], vgmm.mu[i, 1], 100, colors[i], \"X\", lw=2, edgecolors=\"white\"))\n",
    "    frames.append(imgs)\n",
    "    vgmm._variational_maximization(x_train, r)\n",
    "    new_params = np.hstack([param.flatten() for param in vgmm.get_params()])\n",
    "    if np.allclose(new_params, params):\n",
    "        break\n",
    "    else:\n",
    "        params = np.copy(new_params)\n",
    "plt.close()\n",
    "plt.rcParams['animation.html'] = 'html5'\n",
    "anim = animation.ArtistAnimation(fig, frames)\n",
    "anim"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 10.3 Variational Linear Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_toy_data(func, sample_size, std, domain=[0, 1]):\n",
    "    x = np.linspace(domain[0], domain[1], sample_size)\n",
    "    np.random.shuffle(x)\n",
    "    t = func(x) + np.random.normal(scale=std, size=x.shape)\n",
    "    return x, t\n",
    "\n",
    "def cubic(x):\n",
    "    return x * (x - 5) * (x + 5)\n",
    "\n",
    "x_train, y_train = create_toy_data(cubic, 10, 10., [-5, 5])\n",
    "x = np.linspace(-5, 5, 100)\n",
    "y = cubic(x)\n",
    "\n",
    "feature = PolynomialFeature(degree=3)\n",
    "X_train = feature.transform(x_train)\n",
    "X = feature.transform(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "vlr = VariationalLinearRegression(beta=0.01)\n",
    "vlr.fit(X_train, y_train)\n",
    "y_mean, y_std = vlr.predict(X, return_std=True)\n",
    "plt.scatter(x_train, y_train, s=100, facecolor=\"none\", edgecolor=\"b\")\n",
    "plt.plot(x, y, c=\"g\", label=\"$\\sin(2\\pi x)$\")\n",
    "plt.plot(x, y_mean, c=\"r\", label=\"prediction\") \n",
    "plt.fill_between(x, y_mean - y_std, y_mean + y_std, alpha=0.2, color=\"pink\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 10.6 Variational Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_toy_data(add_outliers=False, add_class=False):\n",
    "    x0 = np.random.normal(size=50).reshape(-1, 2) - 3.\n",
    "    x1 = np.random.normal(size=50).reshape(-1, 2) + 3.\n",
    "    return np.concatenate([x0, x1]), np.concatenate([np.zeros(25), np.ones(25)]).astype(np.int)\n",
    "x_train, y_train = create_toy_data()\n",
    "x0, x1 = np.meshgrid(np.linspace(-7, 7, 100), np.linspace(-7, 7, 100))\n",
    "x = np.array([x0, x1]).reshape(2, -1).T\n",
    "feature = PolynomialFeature(degree=1)\n",
    "X_train = feature.transform(x_train)\n",
    "X = feature.transform(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "vlr = VariationalLogisticRegression()\n",
    "vlr.fit(X_train, y_train)\n",
    "y = vlr.proba(X).reshape(100, 100)\n",
    "\n",
    "plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)\n",
    "plt.contourf(x0, x1, y, np.array([0., 0.01, 0.1, 0.25, 0.5, 0.75, 0.9, 0.99, 1.]), alpha=0.2)\n",
    "plt.colorbar()\n",
    "plt.xlim(-7, 7)\n",
    "plt.ylim(-7, 7)\n",
    "plt.gca().set_aspect('equal', adjustable='box')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
